package com.heima.media.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.heima.common.dto.ResponseResult;
import com.heima.media.entity.WmSensitive;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.heima.media.service.IWmSensitiveService;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 敏感词信息表 前端控制器
 * </p>
 *
 * @author itheima
 * @since 2022-03-26
 */
@RestController
@RequestMapping("/api/v1/sensitive")
@Api(tags = "敏感词信息表接口")
@CrossOrigin
@Slf4j
public class WmSensitiveController{

    @Autowired
    private IWmSensitiveService wmSensitiveService;


    @Autowired
    private IWmSensitiveService sensitiveService;

    /**
     * 从excel中读取敏感词更新到数据库
     *
     * @param fileName
     * @return
     */
    @PostMapping("/read")
    public ResponseResult readExcel(String fileName) {
        // 通过easyExcel读取表格中的内容
        // 这里 需要指定读用哪个class去读，然后读取第一个sheet 文件流会自动关闭
        // 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行
        EasyExcel.read(fileName, WmSensitive.class, new PageReadListener<WmSensitive>(dataList -> {
            for (WmSensitive demoData : dataList) {
                log.info("读取到一条数据{}", JSON.toJSONString(demoData));
                // 将表格中的敏感词更新到数据库中
                // 数据库去重操作
                LambdaQueryWrapper<WmSensitive> query = new LambdaQueryWrapper<>();
                query.eq(WmSensitive::getSensitives, demoData.getSensitives());
                int count = sensitiveService.count(query);
                if (count <= 0) {
                    // 新增
                    demoData.setCreatedTime(new Date());
                    sensitiveService.save(demoData);
                }
            }
        })).sheet().doRead();
        return ResponseResult.okResult();
    }


    /**
     * 读取数据库写入到excel中
     * @param fileName
     * @return
     */
    @PostMapping("/write")
    public ResponseResult writeExcel(String fileName){
        // 从数据库查询敏感词列表
        List<WmSensitive> list = sensitiveService.list();
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, WmSensitive.class)
                .sheet("敏感词")
                .doWrite(() -> {
                    // 分页查询数据
                    return list;
                });
        return ResponseResult.okResult();
    }


}
